#pragma once

#include <stdlib.h>
#include "Common.hpp"



class RemoveTag
{
    std::string ParseTitle(const std::string& raw_html)
    {
        static std::string title_pre = "<title>"; 
        static std::string title_back = "</title>";

        size_t left_pos = raw_html.find(title_pre);
        if(left_pos == std::string::npos) return "";
        left_pos += title_pre.size();
        size_t right_pos = raw_html.find(title_back , left_pos);
        if(right_pos == std::string::npos) return "";

        std::string title = raw_html.substr(left_pos , right_pos - left_pos);
        for(auto& ch :title)
            tolower(ch);
        return std::move(title);
    }

    std::string ParseContent(const std::string& raw_html)
    {
        // 1. 属于标签的内容删除
        // 2. 不属于标签的内容保留

        std::string ret;
        bool is_tag = true;   // 代表状态,是否属于标签
        for(auto ch : raw_html)
        {
            switch(ch)
            {
                case '<':
                is_tag = true;
                break;
                case '>':
                is_tag = false;
                break;
                default:
                if(!is_tag)
                    ret += tolower(ch);
                break;
            }
        }
        return std::move(ret);
    }
public:
    void operator()(std::shared_ptr<html_base> html_ptr)
    {
        if(!html_ptr->_if_remove_tag)
        {
            html_ptr->_if_remove_tag = true;

            // 1. 获取文章标题
            // 2. 获取去标签之后的HTML内容

            html_ptr->_title = ParseTitle(html_ptr->_content);
            std::string clean_html = ParseContent(html_ptr->_content);
            html_ptr->_content.swap(clean_html);
        }
    }
private:
};